package com.xq.demo;

import org.apache.zookeeper.*;

import java.util.concurrent.CountDownLatch;

public class ZookeeperDemo {

     /** 信号量，阻塞程序执行，用于等待zookeeper连接成功，发送成功信号 */
     static final CountDownLatch connectedSemaphore = new CountDownLatch(1);

    public static void main(String[] args) {
        try {
            ZooKeeper zk = new ZooKeeper("127.0.0.1:2181", 2000,
                    new Watcher() {
                        @Override
                        public void process(WatchedEvent event) {
                            // 获取事件的状态
                            Event.KeeperState keeperState = event.getState();
                            Event.EventType eventType = event.getType();
                            System.out.println(event);

                            // 如果是建立连接
                            if (Event.KeeperState.SyncConnected == keeperState) {
                                if (Event.EventType.None == eventType) {
                                    // 如果建立连接成功，则发送信号量，让后续阻塞程序向下执行
                                    System.out.println("zk 建立连接");
                                    connectedSemaphore.countDown();
                                }
                            }
                        }
                    });

            // 进行阻塞
            connectedSemaphore.await();
            //zk.exists("/testRoot3", true);
            //zk.create("/testRoot3", "testRoot3".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);

            //zk.exists("/testRootTemp", true);
            //zk.create("/testRootTemp", "testRootTemp".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL);
            zk.exists("/testRoot", true);
            zk.create("/testRoot3", "testRoot3".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT_SEQUENTIAL);

            //zk.exists("/testRootTemp", true);
            //zk.create("/testRootTemp", "testRootTemp".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL);

            //zk.exists("/testRootTemp", true);
            //zk.create("/testRootTemp", "testRootTemp".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL_SEQUENTIAL);


            //zk.exists("/testRoot", true);
            //zk.create("/testRoot", "testRoot".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE,CreateMode.PERSISTENT_SEQUENTIAL);
            // 创建父节点
             //zk.create("/testRoot", "testRoot".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE,
             //CreateMode.PERSISTENT);
            //zk.exists("/testRootTemp", true);
            //zk.create("/testRootTemp", "testRoot".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE,CreateMode.EPHEMERAL);
            // 创建子节点
            // zk.create("/testRoot/children", "children data".getBytes(),
            // Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);

            // 获取节点洗信息
            // byte[] data = zk.getData("/testRoot", false, null);
            // System.out.println(new String(data));
            // System.out.println(zk.getChildren("/testRoot", false));

            // 修改节点的值
            // zk.setData("/testRoot", "modify data root".getBytes(), -1);
            // byte[] data = zk.getData("/testRoot", false, null);
            // System.out.println(new String(data));

            // 判断节点是否存在
            // System.out.println(zk.exists("/testRoot/children", false));
            // 删除节点
            // zk.delete("/testRoot/children", -1);
            // System.out.println(zk.exists("/testRoot/children", false));

            //zk.close();
            Thread.sleep(10000);
        }catch (Exception ex){
            ex.printStackTrace();
        }
    }

}
